import {
    Loading,
    LoadingController,
    AlertController,
    ActionSheetController,
    // Events,
    // ModalController,
    ToastController,
    NavController
} from "ionic-angular";

export class WythetanBasePage {

    public isWeixin: Boolean = false;// 是否是微信平台
    public isFirstLoad: boolean = true;// 是否是第一次进入
    // 在子类组件中,需实例化这些类
    public loadingCtrl: LoadingController;
    public toastCtrl: ToastController;
    public alertCtrl: AlertController;
    public actionSheetCtrl: ActionSheetController;
    public navCtrl: NavController;
    // private
    private loading: Loading;
    private toastActive: Boolean = false;

    constructor() {
        this.configurePlatformInfo();
    }

    ionViewDidEnter() {
        // 页面已经进入了之后，把该参数改为false
        this.isFirstLoad = false;
    }

    /**
     * 加载提示弹窗，需在使用的地方构造函数实例化一个public属性的loadingCtrl,如下:
     * @param content 
     */
    loadingStart(content = "") {
        if (!this.loadingCtrl) {
            return console.error("请在组件中引入loadingController,并实例化为loadingCtrl");
        }
        if (!this.loading) {
            this.loading = this.loadingCtrl.create({
                content: content
            });
            this.loading.present();
        }
    }

    /**
     * 加载完成,加载提示消失
     */
    loadingEnd() {
        if (this.loading) {
            this.loading.dismiss();
            this.loading = null;
        }
    }

    /**
     * 轻toast，2s自动消失，需在使用的地方构造函数实例化一个public属性的loadingCtrl,如下:
     * @param content 
     */
    toast(content: string) {
        if (!this.toastCtrl) {
            return console.error("请在组件中引入ToastController,并实例化为toastCtrl");
        }
        if (this.toastActive == false) {
            let toast = this.toastCtrl.create({
                message: content,
                position: "top",
                duration: 2000
            });
            toast.present();
            toast.onDidDismiss(() => {
                this.toastActive = false;
            });
        }
    }

    /**
     * Alert提示框，需在使用的地方构造函数实例化一个public属性的alertCtrl,如下:
     * @param title 
     * @param sureTitle 
     * @param message 
     */
    alert(
        title: string,
        message: string) {
        if (!this.alertCtrl) {
            return console.log("请在page实例化一个public的alertCtrl");
        }
        let alert = this.alertCtrl.create({
            title: title,
            subTitle: message,
            buttons: [
                {
                    text: "确认",
                }
            ]
        });
        alert.present();
    }

    /**
     * Alert询问框，需在使用的地方构造函数实例化一个public属性的alertCtrl,如下:
     * @param title 
     * @param cancelTitle 
     * @param sureTitle 
     * @param message 
     * @param cancelHander 
     * @param sureHander 
     */
    confirm(
        title: string,
        message: string,
        cancelHander: Function,
        sureHander: Function
    ) {
        if (!this.alertCtrl) {
            return console.log("请在page实例化一个public的alertCtrl");
        }
        let confirm = this.alertCtrl.create({
            title: title,
            message: message,
            buttons: [
                {
                    text: "取消",
                    handler: () => {
                        if (cancelHander != null) {
                        cancelHander();
                        }
                    }
                },
                {
                    text: "确认",
                    handler: () => {
                        if (sureHander != null) {
                        sureHander();
                        }
                    }
                }
            ]
        });
        confirm.present();
    }  

    /**
     * actionSheet选项框，需在使用的地方构造函数实例化一个public属性的actionSheetCtrl,如下:
     * @param buttons 格式为 
     * [
            {
                text: '从草稿箱中选取',
                handler: () => {
                    this.navCtrl.push(DraftsPage);
                }
            }
     *  ]
     */
    actionSheet(buttons) {
        if (!this.actionSheetCtrl) {
            return console.log("请在page实例化一个public的actionSheetCtrl");
        }
        this.actionSheetCtrl.create({
            buttons: [
                ...buttons,
                {
                    text: '取消',
                    role: 'cancel',
                    handler: () => {}
                }
            ]
        }).present();
    }
    
    /**
     * log打印信息,替代console.log,方便全局开关打印信息,建议及时清理
     */
    log(args) {
        console.log(args)
    }

    /**
     * log警告信息
     */
    error(args) {
        console.error(args)
    }

    /**
     * 获取地址中的请求参数,如?t=123&page=1213此类
     * @param name 
     */
    getQueryString(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return decodeURIComponent(r[2]);
        }
        return null;
    }

    /**
     * 获取平台信息
     */
    configurePlatformInfo() {
        let ua = navigator.userAgent;
        this.isWeixin = (ua.toLowerCase().indexOf("micromessenger") !== -1);
    }

    /**
     * 本地存储
     * @param key 
     * @param value 
     */
    local(key, value = null) {
        if (!key) {
            return null;
        }
        if (value === null) {
            // 如果未传value,则为获取
            return JSON.parse(window.localStorage.getItem(key)).key;
        } else if (value === "") {
            // 如果传入了空字符串,则视为清除存储
            window.localStorage.removeItem(key);
        } else {
            // value有值,且不为空,则为赋值
            var data = JSON.stringify({ key: value });
            window.localStorage.setItem(key, data);
        }
    }

    judgeVIP() {
        let user = JSON.parse(localStorage.getItem("User"));
        if (user.IsVip == 0) {
            let that = this;
            this.confirm('提示', '您没有权限，是否开通会员？', null, function() {
                that.navCtrl.push("UserXufeihuiyuanPage");
            });
        } 
        return true;
    }

}